'use strict'

class content {

  constructor () {
    //param默认就是/:id，若要改变路由，则可以设置此属性，比如设置为/:name
    //this.param = '/:id'
  }

  //以下方法，若不需要，要去掉，避免无意义的路由。

  //获取资源具体内容
// * 对应GET/content/:id
  async get (c) {
    let sqltext=`select * from content WHERE id=$1`
    let r=await c.service.psql.query(sqltext,[c.param.id]);
    //! rowCount代表获取多少行，没有代表获取id值不对，404
    if(r.rowCount===0){
        return c.status(404).send('content not found')
    }
    //! rows数组 把第一个元素传上去???
    c.send(r.rows[0])
  }

  //创建资源
// * 对应POST/content
  async post (c) {
    try{
      //! 提交Body数据，通过c.body获取 
      let data=JSON.parse(c.body);
      let sqltext=`INSERT INTO content(id, add_time, detail, title, update_time)`+` Values($1, $2, $3, $4, $5)`;
      //! 生成唯一id 
      let id=c.helper.makeId();
      let tm=Date.now();

      let r=await c.service.psql.query(sqltext,[id, tm, data.detail, data.title, tm]);

      if(r.rowCount===0){
          return c.status(500).send('failed');
      }

      c.send(id);

  }catch(err){
      c.status(400).send('it is not json data');
  }
  }

//   //更新资源
// // * 对应PUT/content/:id
//   async put (c) {

//   }

  //获取列表
// * 对应GET/content
  async list (c) {
    let ret=await c.service.psql.query('select * from content');
    //! 等效于c.res.body=ret.rows 
    c.send(ret.rows);
  }

  //删除资源
// * 对应DELET/content/:id
  async delete (c) {
    let sqltext=`delete from content WHERE id=$1`
    let r=await c.service.psql.query(sqltext,[c.param.id]);
    c.send(r);
  }

  __mid(){
    return[
      {
        name:'token-verify',
        path:['post','delete'] //! 声明要对post和delete请求函数启用此中间件 
      }
    ]
  }

}

module.exports = content
